Expand description
A futures based crate for interacting with IndexedDB on browsers using webassembly.
§Usage
To use idb
, you need to run following command from your project root:
cargo add idb
If you don’t want to use async
/await
syntax, you can disable the futures
feature using:
cargo add idb --no-default-features
After disabling the futures
feature, you can use on_success
and on_error
methods on requests to attach
callbacks.
§Example
To create a new database, you can use Factory::open
:
use idb::{Database, DatabaseEvent, Error, Factory, IndexParams, KeyPath, ObjectStoreParams};
async fn create_database() -> Result<Database, Error> {
// Get a factory instance from global scope
let factory = Factory::new()?;
// Create an open request for the database
let mut open_request = factory.open("test", Some(1)).unwrap();
// Add an upgrade handler for database
open_request.on_upgrade_needed(|event| {
// Get database instance from event
let database = event.database().unwrap();
// Prepare object store params
let mut store_params = ObjectStoreParams::new();
store_params.auto_increment(true);
store_params.key_path(Some(KeyPath::new_single("id")));
// Create object store
let store = database
.create_object_store("employees", store_params)
.unwrap();
// Prepare index params
let mut index_params = IndexParams::new();
index_params.unique(true);
// Create index on object store
store
.create_index("email", KeyPath::new_single("email"), Some(index_params))
.unwrap();
});
// `await` open request
open_request.await
}
To add data to an object store, you can use ObjectStore::add
:
use idb::{Database, Error, TransactionMode};
use serde::Serialize;
use serde_wasm_bindgen::Serializer;
use wasm_bindgen::JsValue;
async fn add_data(database: &Database) -> Result<JsValue, Error> {
// Create a read-write transaction
let transaction = database.transaction(&["employees"], TransactionMode::ReadWrite)?;
// Get the object store
let store = transaction.object_store("employees").unwrap();
// Prepare data to add
let employee = serde_json::json!({
"name": "John Doe",
"email": "john@example.com",
});
// Add data to object store
let id = store
.add(
&employee.serialize(&Serializer::json_compatible()).unwrap(),
None,
)
.unwrap()
.await?;
// Commit the transaction
transaction.commit()?.await?;
Ok(id)
}
To get data from an object store, you can use ObjectStore::get
:
use idb::{Database, Error, TransactionMode};
use serde_json::Value;
use wasm_bindgen::JsValue;
async fn get_data(database: &Database, id: JsValue) -> Result<Option<Value>, Error> {
// Create a read-only transaction
let transaction = database
.transaction(&["employees"], TransactionMode::ReadOnly)
.unwrap();
// Get the object store
let store = transaction.object_store("employees").unwrap();
// Get the stored data
let stored_employee: Option<JsValue> = store.get(id)?.await?;
// Deserialize the stored data
let stored_employee: Option<Value> = stored_employee
.map(|stored_employee| serde_wasm_bindgen::from_value(stored_employee).unwrap());
// Wait for the transaction to complete (alternatively, you can also commit the transaction)
transaction.await?;
Ok(stored_employee)
}
For more examples on using other functionality, see the tests directory.
Re-exports§
pub use self::event::DatabaseEvent;
pub use self::event::Event;
pub use self::event::StoreEvent;
pub use self::request::Request;
Modules§
- builder
builder
Contains the builder for the database. - This module contains the definition of the
Event
trait and its implementations. - This module contains all the types for handling database requests.
Structs§
- Represents a cursor for traversing or iterating over multiple records in a database.
- Lets applications asynchronously access the indexed databases.
- Provides asynchronous access to an index in a database.
- Options when creating
Index
. - Represents a key cursor for traversing or iterating over multiple records (only keys) in a database.
- Represents a continuous interval over some data type that is used for keys.
- Managed
Cursor futures
A cursor that is managed by the library (for ease of use). - Managed
KeyCursor futures
A key cursor that is managed by the library (for ease of use). - Represents an object store in a database.
- Options when creating an
ObjectStore
. - Provides a static, asynchronous transaction on a database. All reading and writing of data is done within transactions.
- Transaction
Future futures
Future that resolved when transaction is completed. Either successfully or with an error.
Enums§
- Specifies the cursor direction.
- Error type for
idb-sys
crate. - Represents key path of an object store
- Specifies a query when fetching data from object store
- Specifies the transaction mode.
- Transaction
Result futures
An enum that represents the result state of a transaction.